#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <stack>
#include <string>
#include <vector>
using namespace std;

int getSum( vector< int > nums, int i, int j ) {
    int sum = 0;
    for ( int k = i; k <= j; k++ ) {
        sum += nums[ k ];
    }
    return sum;
}
int main() {
    int           n = 4, k = 3, t = 2;  // n 个数 ;k 个区间; 和都是t的倍数
    vector< int > nums{ 2, 3, 5, 3 };

    vector< int > prefix( n );  // 前缀和
    prefix[ 0 ] = nums[ 0 ];
    for ( int i = 1; i < n; i++ ) {
        prefix[ i ] = prefix[ i - 1 ] + nums[ i ];
    }

    long long maxN     = 0;
    int       rangeLen = k;
    if ( prefix[ n - 1 ] % t == 0 ) {
        k--;
        maxN += prefix[ n - 1 ];
    }

    for ( int i = n - 1; i >= 1; i-- ) {  // 区间内有几个数

        for ( int j = n - 1; j - i + 1 >= 0; j-- ) {  // 从后往前遍历 区间
            if ( k == 0 ) {
                cout << maxN;
                return 0;
            }

            int rangeSum = getSum( nums, j - i + 1, j );

            // if ( j - k < 0 ) {
            //     rangeSum = prefix[ j ];
            // }
            // else {
            //     rangeSum = prefix[ j ] - prefix[ j - k ];
            // }

            if ( rangeSum % t == 0 ) {
                k--;
                maxN += prefix[ n - 1 ];
            }
        }
    }

    return 0;
}

// bool isEqual( const string& str, int i ) {

//     if ( str.empty() ) {
//         return true;
//     }

//     int len = str.size();

//     int begin = 0;
//     int end   = len - i;

//     while ( end != len ) {
//         if ( str[ begin++ ] != str[ end++ ] ) {
//             return false;
//         }
//     }
//     return true;
// }
// int getHuiwenNum( const string& a ) {

//     int len = a.size();

//     int j             = 0;
//     int maxPatternLen = 0;

//     for ( int i = 1; i < len; i++ ) {
//         if ( isEqual( a, i ) ) {
//             maxPatternLen = max( maxPatternLen, i );
//         }
//     }

//     return maxPatternLen;
// }

// int main() {
//     int k = 2;

//     string s = "abccab";

//     int    patternLen = getHuiwenNum( s );
//     string ans        = s;

//     string patternstring = ans.substr( patternLen, s.size() - patternLen );
//     for ( int i = 0; i < k - 1; i++ ) {
//         ans += patternstring;
//     }

//     cout << ans;
//     return 0;
// }

// string isConvert(const string& a, const string& b) {

//     if (a.size() != b.size()) {
//         return "No";
//     }
//     int n = a.size();
//     string temp = a;
//     for (int i = n - 1; i >= 0; i--) {
//         temp = a[i] + temp;
//         if (temp.substr(0, n) == b) {
//             return "Yes";
//         }
//     }

//     return "No";
// }
// int main() {
//     int n;
//     cin >> n;

//     string s;
//     string t;
//     for (int i = 0; i < n; i++) {
//         cin >> s;
//         cin >> t;

//         cout << isConvert(s, t) << endl;
//     }
// }

